package com.iceengine.audio.sound;

/**
 * The WaveSound class is used to simply play a wave-file.
 * @author penguin
 */
import org.lwjgl.util.WaveData;
import org.lwjgl.openal.AL10;
import org.lwjgl.openal.AL;

import java.nio.IntBuffer;
import org.lwjgl.BufferUtils;
public class WaveSound implements Sound {
    private WaveData myData;
    private IntBuffer alBuffer = BufferUtils.createIntBuffer(1);
    private IntBuffer alSource = BufferUtils.createIntBuffer(1);


    public void setListener(float[] Position, float[] Velocity, float[] Orientation)
    {
        AL10.alListener3f(AL10.AL_POSITION, Position[0], Position[1], Position[2]);
        AL10.alListener3f(AL10.AL_VELOCITY, Velocity[0], Velocity[1], Velocity[2]);
        AL10.alListener3f(AL10.AL_ORIENTATION, Orientation[0], Orientation[1], Orientation[2]);
    }

    public void loadSound(String Path)
    {
        myData = WaveData.create(Path);
        AL10.alGenBuffers(alBuffer);
        AL10.alBufferData(alBuffer.get(0), myData.format, myData.data, myData.samplerate);
        myData.dispose();
    }

    public void genSources(float[] sourcePos, float[] sourceVelocity)
    {
        AL10.alGenSources(alSource);
        AL10.alSourcei(alSource.get(0), AL10.AL_BUFFER, alBuffer.get(0));
        AL10.alSourcef(alSource.get(0), AL10.AL_PITCH, 1.0f);
        AL10.alSourcef(alSource.get(0), AL10.AL_GAIN, 1.0f);
        AL10.alSource3f(alSource.get(0), AL10.AL_POSITION, sourcePos[0], sourcePos[1], sourcePos[2]);
        AL10.alSource3f(alSource.get(0), AL10.AL_VELOCITY, sourceVelocity[0], sourceVelocity[1], sourceVelocity[2]);
    }

    public void killSource()
    {
        AL10.alDeleteBuffers(alBuffer.get(0));
        AL10.alDeleteSources(alSource.get(0));
    }

    public void init()
    {
        try {
            AL.create();
        } catch (Exception e)
        {

        }
    }

    public void startPlay()
    {
        AL10.alSourcePlay(alSource.get(0));
    }

    public void stopPlay()
    {
        AL10.alSourcePause(alSource.get(0));
    }

    public void haltPlay()
    {
        AL10.alSourceStop(alSource.get(0));
    }
}
